home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1997-04-02 | 12.0 KB | 809 lines |
- '----------------------------------------------------
- ' pacman v1.o
- '----------------------------------------------------
- ' keller@vip.cybercity.dk
- ' rune keller
- ' sporuplundsvej 105
- ' dk-8472 sporup
- '----------------------------------------------------
- ' finished 28/o4/1996 15:o6:57
- '----------------------------------------------------
-
- '_MAP(X,Y).... BACKGROUND MAP - WALLS AND STUFF
- '_GOODY(X,Y).. PILLS AND POWERPILLS
- '_BOBX(Z)..... X POSITION OF BOB Z (0>14)
- '_BOBY(Z)..... Y POSITION OF BOB Z (0>14)
- '_OFFSETX(Z).. X OFFSET OF BOB Z IN PIXELS (-7>7)
- '_OFFSETY(Z).. Y OFFSET OF BOB Z IN PIXELS (-7>7)
- '_MOVEX(Z).... X MOVEMENT OF BOB Z (-1/0/1)
- '_MOVEY(Z).... Y MOVEMENT OF BOB Z (-1/0/1)
- '_INFO(Z)..... MISC. INFO ON BOB Z
- '_ADDX(Z)..... X MOVE FOR DIRECTION Z (-1/0/1)
- '_ADDY(Z)..... Y MOVE FOR DIRECTION Z (-1/0/1)
- '_SCAN(Z)..... CONTROLS - SCAN CODE FOR DIRECTION Z
- '_SCORE....... PLAYERS SCORE
- '_POINTS...... POINTS TO BE ADDED TO SCORE
- '_LIVES....... LIVES LEFT
- '_LEVEL....... CURRENT LEVEL
- '_LEVELS...... TOTAL AMOUNT OF LEVELS
- '_SOUND....... SOUND ON/OFF (True/False)
- '_LEFT........ PILLS LEFT ON SCREEN
- '_TIMER....... TIME USED ON CURRENT LEVEL - FOR BONUS CALCULCATING
-
-
-
- 'SETTINGS
-
- Request Off
- Led Off
-
-
-
- 'DIMENSION SETUP
-
- Dim _MAP(14,14)
- Dim _GOODY(14,14)
- Dim _BOBX(3)
- Dim _BOBY(3)
- Dim _OFFSETX(3)
- Dim _OFFSETY(3)
- Dim _MOVEX(3)
- Dim _MOVEY(3)
- Dim _INFO(3)
- Dim _ADDX(3)
- Dim _ADDY(3)
- Dim _SCAN(3)
-
-
-
- 'VARIABLE SETUP
-
- _SCORE=0
- _LIVES=3
- _LEVEL=0
- _LEVELS=2
- _SOUND=True
-
- _ADDX(0)=0
- _ADDY(0)=-1
- _ADDX(1)=0
- _ADDY(1)=1
- _ADDX(2)=1
- _ADDY(2)=0
- _ADDX(3)=-1
- _ADDY(3)=0
-
- _SCAN(0)=76
- _SCAN(1)=77
- _SCAN(2)=78
- _SCAN(3)=79
-
-
-
- 'GO TO NEW LEVEL
-
- _NEWLEVEL:
-
-
-
- 'RESET VARIABLES
-
- _LEFT=0
- _TIMER=0
-
-
-
- 'READ DATA FROM LABEL (_LEVEL)
-
- Restore Val(Str$(_LEVEL mod _LEVELS))
-
-
-
- 'REPEAT X AND Y
-
- For Y=0 To 14
- For X=0 To 14
-
-
-
- 'READ DATA
-
- Read _MAP(X,Y)
-
-
-
- 'CHECK IF THERE IS NO WALLS OR STUFF
-
- If _MAP(X,Y)=0
-
-
-
- 'INSERT POWERPILL IN CORNERS
-
- If X=1 and Y=1 or X=13 and Y=1 or X=1 and Y=13 or X=13 and Y=13
- _GOODY(X,Y)=2
-
-
-
- 'ELSE INSERT PILL
-
- Else
- _GOODY(X,Y)=1
- Inc _LEFT
- End If
- End If
- Next
- Next
-
-
-
- 'RESTART ON CURRENT LEVEL
-
- _LEVEL:
-
-
-
- 'RESET VARIABLES
-
- _POWERPLAY=0
-
- For _OBJECT=0 To 3
- _OFFSETX(_OBJECT)=0
- _OFFSETY(_OBJECT)=0
- _MOVEX(_OBJECT)=0
- _MOVEY(_OBJECT)=0
- _INFO(_OBJECT)=0
- Next
-
- _BOBX(0)=7
- _BOBY(0)=13
-
- For _OBJECT=1 To 3
- _BOBX(_OBJECT)=7
- _BOBY(_OBJECT)=2
- Next
-
-
-
- 'OPEN A SCREEN
-
- Screen Open 0,320,256,16,Lowres
- Get Sprite Palette
- Flash Off
- Curs Off
- Hide
- Cls 0
- Update Off
-
-
-
- 'REPEAT X AND Y
-
- For Y=0 To 14
- For X=0 To 14
-
-
-
- 'DRAW MAP
-
- If _MAP(X,Y)>0
- Paste Icon 100+X*8,68+Y*8,_MAP(X,Y)
- End If
-
-
-
- 'DRAW GOODIES
-
- If _GOODY(X,Y)>0
- Paste Bob 100+X*8,68+Y*8,33+_GOODY(X,Y)
- End If
- Next
- Next
-
-
-
- 'UPDATE SCORE
-
- Gosub _SCORE
-
-
-
- 'UPDATE TIMER
-
- Timer=_TIMER
-
- _OBJECT=0
- Gosub _NEWAREA
-
-
-
- 'MAIN LOOP
-
- Do
-
-
-
- 'CHECK IF PLAYER IS POSITION TO MOVE
-
- If _OFFSETX(0) mod 8=0 and _OFFSETY(0) mod 8=0
-
-
-
- 'REPEAT DIRECTIONS
-
- For _DIRECTION=0 To 3
-
-
-
- 'CHECK IF KEY IS PRESSED
-
- If Key State(_SCAN(_DIRECTION))=True
-
-
-
- 'CHECK IF PLAYER CAN MOVE IN THAT DIRECTION
-
- If _MAP(_BOBX(0)+_ADDX(_DIRECTION),_BOBY(0)+_ADDY(_DIRECTION))=0
-
-
-
- 'MOVE PLAYER
-
- _MOVEX(0)=_ADDX(_DIRECTION)
- _MOVEY(0)=_ADDY(_DIRECTION)
- End If
- End If
- Next
- End If
-
-
-
- 'REPEAT GHOSTS
-
- For _OBJECT=1 To 3
-
-
-
- 'CHECK IF GHOST IS IN POSITION TO MOVE
-
- If _OFFSETX(_OBJECT) mod 8=0 and _OFFSETY(_OBJECT) mod 8=0
-
-
-
- 'GET A RANDOM DIRECTION
-
- _DIRECTION=Rnd(3)
-
-
-
- 'CHECK GHOST ISN'T TURNING AROUND
-
- If _ADDX(_DIRECTION)=0 or _MOVEX(_OBJECT)=0
- If _ADDY(_DIRECTION)=0 or _MOVEY(_OBJECT)=0
-
-
-
- 'CHECK IF GHOST CAN MOVE IN THAT DIRECTION
-
- If _MAP(_BOBX(_OBJECT)+_ADDX(_DIRECTION),_BOBY(_OBJECT)+_ADDY(_DIRECTION))=0
-
-
-
- 'MOVE GHOST
-
- _MOVEX(_OBJECT)=_ADDX(_DIRECTION)
- _MOVEY(_OBJECT)=_ADDY(_DIRECTION)
- End If
- End If
- End If
- End If
- Next
-
-
-
- 'REPEAT BOBS
-
- For _OBJECT=0 To 3
-
-
-
- 'REPEAT DIRECTIONS
-
- For _DIRECTION=0 To 3
-
-
-
- 'CHECK IF CURRENT DIRECTION IS THE RIGHT
-
- If _MOVEX(_OBJECT)=_ADDX(_DIRECTION) and _MOVEY(_OBJECT)=_ADDY(_DIRECTION)
-
-
-
- 'CHECK IF BOB SHOULD MOVE
-
- If _OBJECT=0 or _POWERPLAY=0 or _INFO(_OBJECT)<2 or Timer mod 2=0
-
-
-
- 'MOVE BOB
-
- _OFFSETX(_OBJECT)=_OFFSETX(_OBJECT)+_ADDX(_DIRECTION)
- _OFFSETY(_OBJECT)=_OFFSETY(_OBJECT)+_ADDY(_DIRECTION)
- End If
-
-
-
- 'CHECK IF BOB SHOULD ENTER A NEW AREA
-
- If _ADDX(_DIRECTION)<>0 and Abs(_OFFSETX(_OBJECT))=>8 or _ADDY(_DIRECTION)<>0 and Abs(_OFFSETY(_OBJECT))=>8
-
-
-
- 'UPDATE VARIABLES
-
- _OFFSETX(_OBJECT)=0
- _OFFSETY(_OBJECT)=0
- _BOBX(_OBJECT)=_BOBX(_OBJECT)+_ADDX(_DIRECTION)
- _BOBY(_OBJECT)=_BOBY(_OBJECT)+_ADDY(_DIRECTION)
-
-
-
- 'UPDATE AREA
-
- Gosub _NEWAREA
-
-
-
- 'CHECK IF PLAYER CAN'T GO ANY FURTHER
-
- If _MAP(_BOBX(_OBJECT)+_ADDX(_DIRECTION),_BOBY(_OBJECT)+_ADDY(_DIRECTION))<>0
- _MOVEX(_OBJECT)=0
- _MOVEY(_OBJECT)=0
- End If
- End If
- End If
- Next
- Next
-
-
-
- 'DISPLAY PLAYER BOB
-
- Bob 0,100+_BOBX(0)*8+_OFFSETX(0),68+_BOBY(0)*8+_OFFSETY(0),1+((_MOVEX(0)+1)/2+Abs(_MOVEY(0))*(_MOVEY(0)+5)/2)*6+(Timer/4) mod 6
-
-
-
- 'REPEAT GHOSTS
-
- For _OBJECT=1 To 3
-
-
-
- 'CHECK WHICH FRAME TO DISPLAY
-
- If _POWERPLAY>100 and _INFO(_OBJECT)>0 or _POWERPLAY>0 and Timer mod 4<2 and _INFO(_OBJECT)>0
-
-
-
- 'CHECK FOR EYE-FRAME
-
- If _INFO(_OBJECT)=1
- Bob _OBJECT,100+_BOBX(_OBJECT)*8+_OFFSETX(_OBJECT),68+_BOBY(_OBJECT)*8+_OFFSETY(_OBJECT),33
-
-
-
- 'CHECK FOR BLUE GHOST-FRAME
-
- Else If _INFO(_OBJECT)=2
- Bob _OBJECT,100+_BOBX(_OBJECT)*8+_OFFSETX(_OBJECT),68+_BOBY(_OBJECT)*8+_OFFSETY(_OBJECT),31+(Timer/4) mod 2
- End If
-
-
-
- 'CHECK FOR NORMAL GHOST FRAME
-
- Else
- Bob _OBJECT,100+_BOBX(_OBJECT)*8+_OFFSETX(_OBJECT),68+_BOBY(_OBJECT)*8+_OFFSETY(_OBJECT),23+_OBJECT*2+(Timer/4) mod 2
- End If
- Next
-
-
-
- 'UPDATE BOBS
-
- Bob Draw
-
-
-
- 'CHECK FOR COLLISION BETWEEN PLAYER AND GHOSTS
-
- If Bob Col(0,1 To 3)
-
-
-
- 'GET GHOST IMPLEMENTED IN COLLISION
-
- For _TMPOBJ=1 To 3
- Exit If Col(_TMPOBJ)
- Next
-
-
-
- 'CHECK IF GHOST IS IN NORMAL STATE
-
- If _POWERPLAY=0 or _INFO(_TMPOBJ)=0
-
-
-
- 'PLAYER DIE-SOUND
-
- If _SOUND=True
- Sam Raw %11,Start(6)+6274,2188,8000
- End If
-
-
-
- 'STORE TIMER
-
- _TIMER=Timer
-
-
-
- 'UPDATE LIVES
-
- Dec _LIVES
-
- If _LIVES<0
- Goto _END
- End If
-
-
-
- 'FADE OUT
-
- Wait 30
- Fade 1
- Wait 15
-
-
-
- 'RETURN TO START
-
- Goto _LEVEL
-
-
-
- 'CHECK IF PLAYER IS IN BLUE STATE
-
- Else If _INFO(_TMPOBJ)=2
-
-
-
- 'GHOST DIE-SOUND
-
- If _SOUND=True
- Sam Raw %11,Start(6)+2352,3922,8000
- End If
-
-
-
- 'CHANGE GHOST STATE TO EYE
-
- _INFO(_TMPOBJ)=1
-
-
-
- 'CALCULATE POINTS FOR KILLING GHOST
-
- _POINT=200
- For _TMP=1 To 3
- If _INFO(_TMP)<2
- _POINT=_POINT*2
- End If
- Next
-
-
-
- 'UPDATE SCORE
-
- Gosub _SCORE
- End If
- End If
-
-
-
- 'CHECK DURATION OF POWER PILL
-
- If _POWERPLAY>0
- Dec _POWERPLAY
- If _POWERPLAY=0
-
-
-
- 'RESET GHOSTS TO NORMAL STATE
-
- For _OBJECT=1 To 3
- _INFO(_OBJECT)=0
- Next
- End If
- End If
-
-
-
- 'UPDATE BOBS
-
- Wait Vbl
- Bob Clear
- Clear Key
-
-
-
- 'END LOOP
-
- Loop
-
-
-
- 'END GAME
-
- _END:
-
-
-
- 'FADE OUT
-
- Fade 1
- Wait 15
- End
-
-
-
- 'ENTER NEW AREA
-
- _NEWAREA:
-
-
-
- 'CHECK IF PLAYER IS CURRENT OBJECT
-
- If _OBJECT=0
-
-
-
- 'CHECK IF THERE IS A PILL IN NEW AREA
-
- If _GOODY(_BOBX(0),_BOBY(0))=1
-
-
-
- 'COLLECT PILL-SOUND
-
- If _SOUND=True
- Sam Raw %1100,Start(6),702,8000
- End If
-
-
-
- 'INCREASE SCORE BY 10
-
- _POINT=10
- Gosub _SCORE
-
-
-
- 'UPDATE AREA
-
- Gosub _CLEANUP
-
-
-
- 'DECREASE PILLS LEFT
-
- Dec _LEFT
-
-
-
- 'CHECK IF NO MORE PILLS LEFT
-
- If _LEFT=0
-
-
-
- 'CALCULATE BONUS BY TIME USED
-
- If Timer<1500
- _POINT=3000-Timer*2
- End If
-
-
-
- 'UPDATE SCORE
-
- Gosub _SCORE
-
-
-
- 'UPDATE BOBS
-
- Bob Draw
- Wait 30
-
-
-
- 'INCREASE LEVEL
-
- Inc _LEVEL
-
-
-
- 'FADE OUT
-
- Fade 1
- Wait 15
-
-
-
- 'RETURN TO NEXT LEVEL
-
- Goto _NEWLEVEL
- End If
-
-
-
- 'CHECK IF THERE IS A POWER PILL IN NEW AREA
-
- Else If _GOODY(_BOBX(0),_BOBY(0))=2
-
-
-
- 'COLLECT POWERPILL-SOUND
-
- If _SOUND=True
- Sam Raw %11,Start(6)+702,1650,8000
- End If
-
-
-
- 'REPEAT GHOSTS
-
- For _TMPOBJ=1 To 3
-
-
-
- 'CHANGE GHOST STATE TO BLUE, UNLESS ALREADY IN BLUE/EYE STATE
-
- If _INFO(_TMPOBJ)=0
- _INFO(_TMPOBJ)=2
- End If
- Next
-
-
-
- 'SET POWERPILL DURATION TO 500
-
- _POWERPLAY=500
-
-
-
- 'UPDATE AREA
-
- Gosub _CLEANUP
- End If
-
-
-
- 'WIPE GOODIES FROM AREA
-
- _GOODY(_BOBX(0),_BOBY(0))=0
-
-
-
- 'CHECK IF CURRENT OBJECT IS A GHOST
-
- Else If _OBJECT=>1 and _OBJECT<=3
-
-
-
- 'CHECK IF GHOST IS IN RESURRECT POSITION
-
- If _BOBX(_OBJECT)=7 and _BOBY(_OBJECT)=2 and _INFO(_OBJECT)=1
-
-
-
- 'RESURRECT GHOST
-
- _INFO(_OBJECT)=0
- End If
- End If
-
- Return
-
-
-
- _CLEANUP:
-
-
-
- 'KILL GOODY GFX
-
- Ink 0
- Bar 100+_BOBX(0)*8,68+_BOBY(0)*8 To 106+_BOBX(0)*8,74+_BOBY(0)*8
-
- Return
-
-
-
- _SCORE:
-
-
-
- 'CHECK IF EXTRA LIFE SHOULD BE AWARDED
-
- If(_SCORE+_POINT)/10000>_SCORE/10000
-
-
-
- 'EXTRA LIFE-SOUND
-
- If _SOUND=True
- Sam Raw %11,Start(6)+8462,2882,8000
- End If
-
-
-
- 'INCREASE LIVES
-
- Inc _LIVES
- End If
-
-
-
- 'INCREASE SCORE BY POINT
-
- _SCORE=_SCORE+_POINT
- _POINT=0
-
-
-
- 'PRINT SCORE TO SCREEN
-
- Ink 1,0
- Text 100,198,Right$("00"+Str$(_LIVES)-" ",2)+" "+Right$("000000000"+Str$(_SCORE)-" ",9)+" "+Right$("00"+Str$(_LEVEL)-" ",2)
-
- Return
-
-
-
- 0
- Data 1,2,2,2,2,2,2,2,2,2,2,2,2,2,3
- Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,4
- Data 4,0,2,2,2,2,3,0,1,2,2,2,2,0,4
- Data 4,0,0,0,0,0,11,2,8,0,0,0,0,0,4
- Data 4,0,1,2,2,0,4,0,4,0,2,2,3,0,4
- Data 4,0,4,0,0,0,4,0,4,0,0,0,4,0,4
- Data 4,0,5,2,2,2,6,0,5,2,2,2,6,0,4
- Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,4
- Data 4,0,1,2,2,2,3,0,1,2,2,2,3,0,4
- Data 4,0,4,0,0,0,4,0,4,0,0,0,4,0,4
- Data 4,0,5,2,2,0,4,0,4,0,2,2,6,0,4
- Data 4,0,0,0,0,0,4,0,4,0,0,0,0,0,4
- Data 4,0,2,2,2,2,6,0,5,2,2,2,2,0,4
- Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,4
- Data 5,2,2,2,2,2,2,2,2,2,2,2,2,2,6
-
- 1
- Data 1,2,2,2,2,2,2,2,2,2,2,2,2,2,3
- Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,4
- Data 4,0,4,0,1,2,3,0,1,2,3,0,4,0,4
- Data 4,0,4,0,4,0,5,2,6,0,4,0,4,0,4
- Data 4,0,4,0,0,0,0,0,0,0,0,0,4,0,4
- Data 4,0,4,0,1,2,2,2,2,2,3,0,4,0,4
- Data 4,0,4,0,4,0,0,0,0,0,4,0,4,0,4
- Data 4,0,0,0,4,0,2,10,2,0,4,0,0,0,4
- Data 4,0,2,2,6,0,0,4,0,0,5,2,2,0,4
- Data 4,0,0,0,0,0,0,4,0,0,0,0,0,0,4
- Data 4,0,2,3,0,4,0,4,0,4,0,1,2,0,4
- Data 4,0,0,4,0,4,0,4,0,4,0,4,0,0,4
- Data 4,0,1,6,0,4,0,4,0,4,0,5,3,0,4
- Data 4,0,4,0,0,4,0,0,0,4,0,0,4,0,4
- Data 5,2,7,2,2,7,2,2,2,7,2,2,7,2,6